class Solution {
    public int minCost(int[][] costs) {
        if(costs == null || costs.length == 0) return 0 ; 
        int n = costs.length ;
        
        int[][] dp = new int[n][3] ;
        dp[0][0] = costs[0][0] ; 
        dp[0][1] = costs[0][1] ; 
        dp[0][2] = costs[0][2] ; 
        for(int i=1 ; i < n ; i ++){
            dp[i][0] = costs[i][0]+ Math.min(dp[i-1][1] , dp[i-1][2]);
            dp[i][1] = costs[i][1]+ Math.min(dp[i-1][0] , dp[i-1][2]);
            dp[i][2] = costs[i][2]+ Math.min(dp[i-1][1] , dp[i-1][0]);
        }        
      return Math.min(dp[n-1][0] , Math.min(dp[n-1][1] , dp[n-1][2]));
    }
}
class Solution1 {
    public int maxProfit(int[] prices) {
        int len = prices.length ;
        int[][] dp = new int[len][3] ;
        dp[0][0] = -prices[0] ;
        dp[0][1] = 0 ;
        dp[0][2] = 0 ;
        for(int i=1 ; i < len ; i ++){
            dp[i][0] = Math.max(dp[i-1][1] - prices[i] , dp[i-1][0]) ;
            dp[i][1] = Math.max(dp[i-1][1] , dp[i-1][2]) ;
            dp[i][2] = dp[i-1][0] + prices[i] ;
        }

        return Math.max(dp[len-1][0] , Math.max(dp[len-1][1] , dp[len-1][2])) ;
    }
}